Knative提供了基于流量的灰度发布能力,您可以根据流量百分比灰度发布服务。本文介绍如何在Knative中基于流量灰度发布服务。
前提条件
已创建ACK托管集群或ACK Serverless集群。具体操作,请参见创建ACK Serverless集群、创建Kubernetes托管版集群。
已为集群部署Knative,具体操作,请参见在ACK集群中部署Knative、在ACK Serverless集群中部署Knative。
步骤一:创建服务
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在Knative页面的服务管理页签下,选择命名空间为default,然后单击创建服务,部署一个名为helloworld-go的服务,部署完成后单击创建。
关键配置项如下所示,更多配置项信息,请参见部署Knative服务。
配置项
说明
命名空间
选择该服务所属的命名空间。
服务名称
自定义该服务的名称,本例服务名称为helloworld-go。
镜像名称
您可以单击选择镜像,在弹出的对话框中选择所需的镜像并单击确定。您还可以填写私有registry。填写的格式为domainname/namespace/imagename:tag。本例中为registry.cn-hangzhou.aliyuncs.com/knative-sample/helloworld-go。
镜像版本
您可以单击选择镜像版本选择镜像的版本。若不指定,默认为latest。本例中镜像版本为73fbdd56。
访问协议
支持HTTP和gRPC两种访问协议。
说明说明
gRPC是基于HTTP2协议标准设计和ProtoBuf(Protocol Buffers)序列化协议开发的,且支持众多开发语言。与HTTP相比,HTTP2在发送和接收方面更紧凑和高效。
容器端口
设置暴露的容器访问端口,端口号必须介于1~65535。
若目标服务的状态列显示成功,表明服务已部署成功。
在服务管理页面的默认域名和访问网关列,分别获取
helloworld-go
服务的域名和网关地址。执行以下命令,访问
helloworld-go
服务。curl -H "host: <默认域名>" http://<访问网关IP> # 网关IP和默认域名请以您的实际数据为准。
预期输出:
Hello World!
预期输出表明,服务已创建成功并可以正常访问。
步骤二:通过创建修订版本灰度发布服务
登录容器服务管理控制台,在左侧导航栏选择集群。
在集群列表页面,单击目标集群名称,然后在左侧导航栏,选择 。
在服务管理页面,单击目标服务名称,然后在服务详情页面,单击创建修订版本。
创建修订版本。
选择服务管理页签,然后单击目标服务右侧操作列下的详情。
单击创建修订版本。
在基本信息配置向导步骤,单击高级设置,设置最新修订版本的环境变量为
TARGET=Knative
。单击下一步。
在流量设置配置向导步骤,设置最新修订版本的流量比例为0,单击创建。
说明所有修订版本的流量比例之和需要等于100。
创建完成后,选择服务管理页签,可以看到新创建服务版本的详细信息。
执行以下命令,访问
helloworld-go
服务。curl -H "host: <默认域名>" http://<访问网关IP> # 网关IP和默认域名请以您的实际数据为准。
预期输出:
Hello World!
预期输出结果表明,服务已创建成功并可以正常访问。由于新版本服务的流量比例为0,所以访问helloworld-go服务,还是请求到旧版本的服务。
修改流量比例灰度发布服务。
在服务管理页面,单击目标服务右侧操作列下的详情。
单击设置流量比例,在设置流量比例对话框中,将新版本和旧版本的流量比例都设置为50%,然后单击确定。
服务流量比例设置成功后,选择服务管理页签,可以看到新版本和旧版本服务的详细信息。
执行以下命令,访问服务。
while true; do curl -H "host: <默认域名>" http://<访问网关IP>; slesp 1; done # 网关IP和默认域名请以您的实际数据为准。
说明这个命令会一直运行,直到您手动停止它。如果您只想观察一段时间,可以按
Ctrl + C
组合键来终止命令的运行。预期输出:
Hello World! Hello Knative! Hello World! Hello Knative! Hello World! Hello Knative! ...
由于新、旧版本的流量比例各为50%,所以当前访问helloworld-go服务的话,基本是按50%进行流量分配。
您可以通过调整流量比例继续灰度发布服务,直到新版本服务的流量比例为100%,完成灰度发布服务。在这个过程中,如果发现新版本有问题,您可以随时通过调整流量比例的方式进行回滚操作。